package com.huanmin.osd;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.huanmin.osd.utils.Tool;

import java.sql.Types;
import java.util.Collections;
//参考配置: https://baomidou.com/pages/981406/#service-%E7%AD%96%E7%95%A5%E9%85%8D%E7%BD%AE
public class demo1 {

    public  static void  mysql(){
        Tool.deleteDirAll(Tool.outPath("mysql")); //先删除之前的
        String url="jdbc:mysql://127.0.0.1:3306/demo?autoCommit=true&autoReconnect=true&useUnicode=true&tinyInt1isBit=false&zeroDateTimeBehavior=convertToNull&characterEncoding=UTF-8&yearIsDateType=false&serverTimezone=Asia/Shanghai";
        FastAutoGenerator.create(url, "root", "root")
                .globalConfig(builder -> {
                    builder.author("huanmin") // 设置作者
                            .enableSwagger() // 开启 swagger 模式
                            .fileOverride() // 覆盖已生成文件
                            .outputDir( Tool.outPath("mysql")); // 指定输出目录
                })
                .dataSourceConfig(builder -> builder.typeConvertHandler((globalConfig, typeRegistry, metaInfo) -> {
                    int typeCode = metaInfo.getJdbcType().TYPE_CODE;
                    if (typeCode == Types.SMALLINT) {
                        // 自定义类型转换
                        return DbColumnType.INTEGER;
                    }
                    return typeRegistry.getColumnType(metaInfo);

                }))
                .packageConfig(builder -> {
                    builder.parent("com.baomidou.mybatisplus.samples.generator") // 设置父包名
                            .moduleName("system") // 设置模块名,会在父包名下生成一个system包用于存放entity、mapper、service、controller
                            .entity("entity") // 设置Entity名
                            .mapper("mapper") // 设置Mapper名
                            .service("service") // 设置Service名
                            .serviceImpl("service.impl") // 设置ServiceImpl名
                            .controller("controller") // 设置Controller名
                            .pathInfo(Collections.singletonMap(OutputFile.xml,
                                    Tool.outPath("mysql")+"xml\\")); // 设置mapperXml生成路径

                })
                .strategyConfig(builder -> {
                    builder.addInclude("t_user") // 设置需要生成的表名
                            .addTablePrefix("t_", "c_"); // 设置过滤表前缀
                })
                .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板，默认的是Velocity引擎模板
                .execute();
    }



}
